I2C networks are common and use well-known established protocols. In an 2C network, a single wire carries serial data and codes over a serial data line (SDA), and a second wire carries a clock signal over a serial clock line (SCL). This may be referred to as dual signaling, or dual signal channel communications, since the clock signal and data signal are separately transmitted. A reference voltage, such as ground, is locally provided. The wires are passively pulled up by resistors connected to, for example, 5V or 3.3V. The wires are pulled down by open-drain MOSFETs. It is desirable to keep the pull-up resistance value high, such as greater than 2K Ohms, to limit the current drawn. Due to capacitive loading on the wires, the wire length is limited, such as to a few feet. The maximum allowable capacitance is 400 pF. Typically, I2C is for communications within the same circuit board. The data speed is limited due to the capacitance, and 100 kbps-400 kbps is common.
The I2C network interconnects master and slave devices on the same board. The master is the device requesting information from an addressed slave and, in response, the slave transmits the requested information. It is typical to have only one master on a single circuit board and multiple slaves. Only one device controls the I2C bus at a time. There are protocols for arbitration.
The well-established I2C protocol standard includes rules for starting, stopping, interrupting, addressing, etc. For example, for starting a packet (a START code), the SCL is pulled high while the SDA transitions its state from high to low. A 7-bit address code is then transmitted followed by a read/write bit to inform the slave whether the master is writing to it or reading from it. Only the addressed slave responds to the message. The data signals are “detected” by the addressed receiver at a sampling time occurring at the transition from low to high on the SCL. An acknowledge bit ACK is transmitted from the “receiving device” to the “transmitting device” after the address (plus R/W bit) and after every 8-bit byte received. For a multi-byte message, only after a byte is transmitted and the ACK signal is received, is another byte transmitted. Clock stretching (holding the SCL low for an extended length of time) may be used to stall the bus while waiting for a response from a slave device. For designating the end of the packet (a STOP code), the SCL is pulled high while the SDA transitions its state from low to high. Only a device acting as a master generates the SCL signals, with the exception that the slave can hold the SCL low for clock stretching.
It is common for an I2C network to also be compatible with the SMBus protocol. The SMBbus protocol is also a well-known standard. The SMBus protocol also includes various codes and protocols for communications, such as an ALERT code.
If a circuit board needs to communicate with another circuit board that is more than a few feet away, the I2C network will most likely have too high a capacitance for the desired bit frequency and signal amplitude. Therefore, an I2C network cannot be used with long cables or even in noisy environments where noise can be coupled onto the cable. For this reason, I2C networks are typically used only for intra-board communications.
What is needed is a technique to communicate between a local I2C network and a remote I2C network that is located more than a few feet away. The system should be robust and be able to operate in a noisy environment.